package com.meiqiang.agent.retransform;

import com.meiqiang.po.Fruit;

import java.lang.instrument.Instrumentation;
import java.lang.instrument.UnmodifiableClassException;

/**
 * retransformClasses应用于agentmain模式，可以在类加载之后重新定义Class，即触发类的重新加载
 *
 * @author : zhengmeiqiang
 * @date : 2024/11/8 14:29
 */
public class RetransformAgent {

    public static void agentmain(String agentArgs, Instrumentation inst)
            throws UnmodifiableClassException {
        /**
         * 重点看一下新加的第二个参数，当canRetransform为true时，表示允许重新定义class。
         * 这时，相当于调用了转换器ClassFileTransformer中的transform方法，会将转换后class的字节作为新类定义进行加载。
         */
        inst.addTransformer(new FruitTransformer(), true);
        inst.retransformClasses(Fruit.class);
        System.out.println("retransform success");
    }
}
